package com.ruoyi.framework.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;

/**
 * 定时任务
 */
@Configuration
public class ScheduledTaskConfig implements SchedulingConfigurer {

    /**
     * 最大线程数
     */
    @Value("${spring.scheduling.maxPoolSize}")
    private int maxPoolSize;

    /**
     * 线程池在关闭时等待正在执行的任务完成的时间（秒）
     */
    @Value("${spring.scheduling.shutdownTimeout}")
    private int shutdownTimeout;

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setThreadNamePrefix("定时任务:SCHEDULE-TASK-"); // 设置线程名称的前缀
        taskScheduler.setPoolSize(maxPoolSize);  // 设置线程池的大小
        taskScheduler.setAwaitTerminationSeconds(shutdownTimeout);  // 线程池在关闭时等待正在执行的任务完成的时间（秒）
        taskScheduler.setWaitForTasksToCompleteOnShutdown(true);
        taskScheduler.initialize();
        scheduledTaskRegistrar.setTaskScheduler(taskScheduler);
    }
}
